
#include "nane/CodecSystem/Image/PNG/PNGImageCodecSystem.h"
#include "nane/CodecSystem/Image/PNG/PNGImageDecoder.h"
#include "nane/CodecSystem/Image/PNG/PNGImageEncoder.h"
#include "nane/core/assert.h"

namespace nane 
{
    ////////////////////////////////////////////////////////////////////////////////////////////////
    PNGImageCodecSystem::PNGImageCodecSystem()
    {
        
    }
    ////////////////////////////////////////////////////////////////////////////////////////////////
    PNGImageCodecSystem::~PNGImageCodecSystem()
    {
        
    }
    ////////////////////////////////////////////////////////////////////////////////////////////////
    bool PNGImageCodecSystem::Initialize()
    {
        return true;
    }
    ////////////////////////////////////////////////////////////////////////////////////////////////
    void PNGImageCodecSystem::Shutdown()
    {
        
    }
    ////////////////////////////////////////////////////////////////////////////////////////////////
    const char* PNGImageCodecSystem::GetFileType()
    {
        return "png";
    }
    ////////////////////////////////////////////////////////////////////////////////////////////////
    IImageDecoder* PNGImageCodecSystem::CreateDecoder( IInputRef* _input )
    {
        NANE_ASSERT_RV( _input != NULL, "IInput must be valid", NULL );
        PNGImageDecoder* pngDecoder = new PNGImageDecoder();
        if( pngDecoder->Initialize(_input) == false )
        {
            delete pngDecoder;
            pngDecoder = NULL;
        }
        return pngDecoder;
    }
    ////////////////////////////////////////////////////////////////////////////////////////////////
    void PNGImageCodecSystem::ReleaseDecoder( IDecoder* _decoder )
    {
        NANE_ASSERT_R( _decoder != NULL, "IDecoder must be valid" );
        PNGImageDecoder* pngDecoder = static_cast<PNGImageDecoder*>(_decoder);
        pngDecoder->Shutdown();
        delete pngDecoder;
    }
    ////////////////////////////////////////////////////////////////////////////////////////////////
    IImageEncoder* PNGImageCodecSystem::CreateEncoder( IOutputRef* _output )
    {
        NANE_ASSERT_RV( _output != NULL, "IOutput must be valid", NULL );
        PNGImageEncoder* pngEncoder = new PNGImageEncoder();
        if( pngEncoder->Initialize(_output) == false )
        {
            delete pngEncoder;
            pngEncoder = NULL;
        }
        return pngEncoder;
    }
    ////////////////////////////////////////////////////////////////////////////////////////////////
    void PNGImageCodecSystem::ReleaseEncoder( IEncoder* _encoder )
    {
        NANE_ASSERT_R( _encoder != NULL, "IEncoder must be valid" );
        PNGImageEncoder* pngEncoder = static_cast<PNGImageEncoder*>(_encoder);
        pngEncoder->Shutdown();
        delete pngEncoder;
    }
    ////////////////////////////////////////////////////////////////////////////////////////////////
}   // namespace nane
